package com.yjzx.util.binlog.core.util;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @author yjzx
 * @date 2024/9/19
 * @description FileOperation
 */
public class FileOperationUtil {
    public static String readLastLine(String file) throws IOException {
        Path positionFile = Paths.get(file);
        if (Files.exists(positionFile)) {
            return readFileLastLine(positionFile);
        }
        return null;
    }

    /**
     * 向文件追加内容
     *
     * @param filePath 文件路径
     * @param line  要追加的内容
     * @throws IOException 如果写入文件时发生错误
     */
    public static void appendToFile(Path filePath, String line) throws IOException {
        createNewFile(filePath);
        // 使用 Files.write 方法追加内容
        Files.write(filePath, line.getBytes(), java.nio.file.StandardOpenOption.APPEND);
    }
    public static void writeToFile(Path filePath, String line) throws IOException {
        createNewFile(filePath);
        // 使用 Files.write 方法追加内容
        Files.write(filePath, line.getBytes(), java.nio.file.StandardOpenOption.WRITE);
    }

    /**
     * 读取文件的最后一行
     *
     * @param file 文件路径
     * @return 最后一行的内容
     * @throws IOException 如果读取文件时发生错误
     */
    private static String readFileLastLine(Path file) throws IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(file.toFile()))) {
            String lastLine = null;
            String line;
            while (StringUtils.isNotBlank(line = reader.readLine())) {
                lastLine = line;
            }
            return lastLine;
        }
    }


    public static void createNewFile(Path positionFile) throws IOException {
        if (positionFile.getParent()!=null){
            // 创建父目录（如果不存在）
            Files.createDirectories(positionFile.getParent());
        }
        // 创建文件（如果不存在）
        if (!Files.exists(positionFile)) {
            Files.createFile(positionFile);
        }

    }
}
